package com.futures.investm;

import android.content.Context;
import android.support.multidex.MultiDex;

import com.futures.investm.constant.Api;
import com.futures.investm.impl.AppImpl;
import com.avos.avoscloud.AVOSCloud;

import com.umeng.commonsdk.UMConfigure;
import com.vise.log.ViseLog;
import com.vise.log.inner.LogcatTree;
import com.vise.xsnow.common.ViseConfig;
import com.vise.xsnow.http.ViseHttp;
import com.vise.xsnow.http.core.ApiCookie;
import com.vise.xsnow.http.interceptor.HttpLogInterceptor;
import com.vise.xsnow.http.interceptor.NoCacheInterceptor;

import java.io.File;
import java.util.HashMap;

import cn.jpush.android.api.JPushInterface;
import okhttp3.Cache;
import tech.com.commoncore.BuildConfig;
import tech.com.commoncore.app.FastManager;
import tech.com.commoncore.base.BaseApplication;
import tech.com.commoncore.manager.LoggerManager;

public class App extends BaseApplication {
    private static final String TAG = "MyApplication";


    @Override
    public void init() {
        initJupsh();


        AVOSCloud.initialize(this, "YvLhpPztqtmdeFaVvs95EDXp-gzGzoHsz", "Q7AVqsSCgCLOSF33WRTIldzX");
//        AVOSCloud.initialize(this, "jzts1l8ImPAJAv5GYxbjMh6c-gzGzoHsz", "DBXxo4mnpJhawq5gfcWSkoXY");
        AVOSCloud.setDebugLogEnabled(true);

        ViseHttp.init(this);
//        DbHelper.getInstance().init(this);


        initNet();


//        // 创建数据库
//        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "bill-db");
//        Database db = helper.getWritableDb();
//        daoSession = new DaoMaster(db).newSession();

//        mBillDaoUtils.insertBill(new Bill(10001l, "", "", "", "", "", "", "", "", ""));

        //初始化Logger日志打印
        LoggerManager.init(TAG, BuildConfig.DEBUG);

        //最简单UI配置模式-必须进行初始化
        FastManager.init(this);
        //以下为更丰富自定义方法
        //全局UI配置参数-按需求设置
        AppImpl impl = new AppImpl(getInstance());
        FastManager.getInstance()
                //设置Adapter加载更多视图--默认设置了FastLoadMoreView
                .setLoadMoreFoot(impl)
                //设置RecyclerView加载过程多布局属性
                .setMultiStatusView(impl)
                //设置全局网络请求等待Loading提示框如登录等待loading--观察者必须为FastLoadingObserver及其子类
                .setLoadingDialog(impl)
                //设置SmartRefreshLayout刷新头-自定加载使用BaseRecyclerViewAdapterHelper
                .setDefaultRefreshHeader(impl)
                //设置全局TitleBarView相关配置
                .setTitleBarViewControl(impl)
                //设置Activity滑动返回控制-默认开启滑动返回功能不需要设置透明主题
                .setSwipeBackControl(impl)
                //设置Activity/Fragment相关配置(横竖屏+背景+虚拟导航栏+状态栏+生命周期)
                .setActivityFragmentControl(impl)
                //设置BasisActivity 子类按键监听
                .setActivityKeyEventControl(impl)
                //设置http请求结果全局控制
                .setHttpRequestControl(impl)
                //设置主页返回键控制-默认效果为2000 毫秒时延退出程序
                .setQuitAppControl(impl);


        ViseLog.getLogConfig()
                .configAllowLog(true)//是否输出日志
                .configShowBorders(false);//是否排版显示
        ViseLog.plant(new LogcatTree());//添加打印日志信息到Logcat的树

        //友盟
        initUmengSDK();
    }

    private void initJupsh() {
        JPushInterface.setDebugMode(true);    // 设置开启日志,发布时请关闭日志
        JPushInterface.init(this);            // 初始化 JPush
    }

    private void initNet() {
        //配置全局请求头
        HashMap<String, String> globalHeaders = new HashMap<String, String>();
//        globalHeaders.put("User-Agent", getUserAgent(this));//用户代理
        // 配置全局请求参数
        HashMap<String, String> globalParams = new HashMap<String, String>();
        globalParams.put("appType", "Android");//app类型
        globalParams.put("appId", "10001");//app标识

        ViseHttp.init(this);
        ViseHttp.CONFIG()
                //配置请求主机地址
                .baseUrl(Api.BASE_URL)
                //配置全局请求头
                .globalHeaders(globalHeaders)
                //配置全局请求参数
                .globalParams(globalParams)
                //配置读取超时时间，单位秒
                .readTimeout(30)
                //配置写入超时时间，单位秒
                .writeTimeout(30)
                //配置连接超时时间，单位秒
                .connectTimeout(30)
                //配置请求失败重试次数
                .retryCount(3)
                //配置请求失败重试间隔时间，单位毫秒
                .retryDelayMillis(1000)
                //配置是否使用cookie
                .setCookie(true)
                //配置自定义cookie
                .apiCookie(new ApiCookie(this))
                //配置是否使用OkHttp的默认缓存
                .setHttpCache(true)
                //配置OkHttp缓存路径
                .setHttpCacheDirectory(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR))
                //配置自定义OkHttp缓存
                .httpCache(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
                //配置自定义离线缓存
                .cacheOffline(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
                //配置自定义在线缓存
                .cacheOnline(new Cache(new File(ViseHttp.getContext().getCacheDir(), ViseConfig.CACHE_HTTP_DIR), ViseConfig.CACHE_MAX_SIZE))
                //配置开启Gzip请求方式，需要服务器支持
                .postGzipInterceptor()
                //配置应用级拦截器
                .interceptor(new HttpLogInterceptor()
                        .setLevel(HttpLogInterceptor.Level.BODY))
                //配置网络拦截器
                .networkInterceptor(new NoCacheInterceptor());
        //配置主机证书验证
//                .hostnameVerifier(new SSLUtil.UnSafeHostnameVerifier("http://192.168.1.100/"))
        //配置SSL证书验证
//                .SSLSocketFactory(SSLUtil.getSslSocketFactory(null, null, null));

    }

    /**
     * 友盟初始化; 分享、統計
     *
     */
    private void initUmengSDK(){
        //https://www.jb51.net/article/137240.html
        /**
         * 初始化common库
         * 参数1:上下文，不能为空
         * 参数2:设备类型，UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子，默认为手机
         * 参数3:Push推送业务的secret
         */
        UMConfigure.setLogEnabled(true);
        UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, null);

//        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
//        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");

    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

//    public DaoSession getDaoSession() {
//        return daoSession;
//    }
}
